home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / magl / wild.c < prev    next >
C/C++ Source or Header  |  1991-10-18  |  2KB  |  82 lines

  1. /* Wild Card Library */
  2. #include <msdos.cf>
  3. #include "wild.h"
  4.  
  5. DTA        *search(char *path,int mode,char *fname);
  6. DTA        *next(char *path,int mode,char *fname);
  7. char    *getext(char *arg);
  8. char    *getname(char *arg);
  9.  
  10. /* Gloval vari. */
  11.  
  12. static DTA    dta;
  13.  
  14. DTA    *search(char *path,int mode,char *fname)
  15. {
  16.     char    *s,*d;
  17.     
  18.     Registers.AX.R = 0x1A00;        /* DTAアドレスの変更 */
  19.     Registers.DX.R = (int)&dta;
  20.     Registers.DS.R = getds();
  21.     calldos(); 
  22.     Registers.AX.R = 0x4E00;        /* 最初に一致するファイル名の検索 */
  23.     Registers.CX.R = mode;
  24.     Registers.DX.R = (int)path;
  25.     Registers.DS.R = getds();
  26.     calldos();
  27.  
  28.     if ((Registers.Flags&0x0001)!=0) {
  29.         *fname = '\0';
  30.         return NULL;
  31.     }
  32.  
  33.     for(s=path,d=fname;*s!='\0';*d++=*s++);
  34.     *d = '\0';
  35.     for(s=dta.fname,d=getname(fname);*s!='\0';*d++=*s++);
  36.     *d = '\0';
  37.     return &dta;
  38.  
  39. }
  40.  
  41. DTA    *next(char *path,int mode,char *fname)
  42. {
  43.     char    *s,*d;
  44.  
  45.     Registers.AX.R = 0x4F00;        /* 次に一致するファイル名の検索 */
  46.     calldos();
  47.  
  48.     if ((Registers.Flags&0x0001)!=0) {
  49.         *fname = '\0';
  50.         return NULL;
  51.     }
  52.  
  53.     for(s=path,d=fname;*s!='\0';*d++=*s++);
  54.     *d = '\0';
  55.     for(s=dta.fname,d=getname(fname);*s!='\0';*d++=*s++);
  56.     *d = '\0';
  57.     return &dta;
  58. }
  59.  
  60. char *getext(char *arg)
  61. {
  62.     char *p;
  63.     
  64.     for(p=arg;*arg!='\0';arg++)
  65.         if (*arg=='\\') p=arg+1;
  66.     for(;*p!='.'&&*p!='\0';p++);
  67.     if (*p=='\0')
  68.         return NULL;
  69.     else
  70.         return p+1;
  71. }
  72.  
  73. char *getname(char *arg)
  74. {
  75.     char *p;
  76.     
  77.     for(p=arg;*arg!='\0';arg++)
  78.         if (*arg=='\\'||*arg==':') p=arg+1;
  79.     return p ;
  80. }
  81.  
  82.